	subroutine calcDuDQ(dudQ,DB,PAR,numpc,numpar,N_eq,NFIX,NNP)
	
	include 'param_dim.inc'
	double precision dudQ(N_eq,numpar),DB(N_eq,NNP*2),PAR(numpar)
	integer PCnnp(nparg_max) ! conta qtos nohs parametros cada ponto de controle influencia
	integer PCnp(nparg_max,NX) ! guarda quais nohs parametros cada ponto de controle influencia
	double precision PCgama(nparg_max,NX) ! guarda os pesos com que cada coord dos PC influencia cada noh parametro
	double precision PCgamaSx(nparg_max,NX),PCgamaSy(nparg_max,NX)! guarda os pesos com que cada parametro S dos PCs influencia cada Coordenada X ou Y dos nohs parametros
	integer cjNPx,cjNPy,jNP
	
	common/dadossensib/PCnnp,PCnp,PCgama,PCgamaSx,PCgamaSy

        do j=1,numpar
	   do i=1,N_eq
		dudQ(i,j) = 0.
	    enddo
	enddo


	do k=1,numpc !ponto de controle -----Q eh cada coordenada dos PC

            do j=1,PCnnp(k) !loop sobre os nohs que o PC k influencia
                jNP = PCnp(k,j)
                cjNPx = (jNP - NFIX)*2 -1 !coluna de DB referente ao x do noh parametro JNP
                cjNPy = (jNP - NFIX)*2    !coluna de DB referente ao y do noh parametro JNP

	        do i=1,N_eq !loop sobre as derivadas dos valores incognitos

		    if(numpar .eq. 3*numpc)then
			dudQ(i,k*3-2) = dudQ(i,k*3-2) + DB(i,cjNPx)*PCgama(k,j)  !dudQ de Qx
			dudQ(i,k*3-1) = dudQ(i,k*3-1) + DB(i,cjNPy)*PCgama(k,j)  !dudQ de Qy
			dudQ(i,k*3  ) = dudQ(i,k*3  ) + (DB(i,cjNPx)*PCgamaSx(k,j)+ 
     &				DB(i,cjNPy)*PCgamaSy(k,j))/
     &				(3.1416*(PAR(k*3)**2+1.0)) !dudQ de Qs
		    else if(numpar .eq. 2*numpc)then
			dudQ(i,k*2-1) = dudQ(i,k*2-1) + DB(i,cjNPx)*PCgama(k,j)  !dudQ de Qx
			dudQ(i,k*2  ) = dudQ(i,k*2  ) + DB(i,cjNPy)*PCgama(k,j)  !dudQ de Qy
		    else if(numpar .eq. numpc)then
			dudQ(i,k    ) = dudQ(i,k    ) + (DB(i,cjNPx)*PCgamaSx(k,j)+ 
     &				DB(i,cjNPy)*PCgamaSy(k,j))/
     &				(3.1416*(PAR( k )**2+1.0)) !dudQ de Qs
		    endif
		enddo
	    enddo
	enddo


	
	return
	end
	
